/*******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.tests.viewers;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.ui.internal.dialogs.cpd.TreeManager;
import org.eclipse.ui.internal.dialogs.cpd.TreeManager.TreeItem;
public class TreeManagerTest extends TestCase {
private static final List STATE_NAMES;
private static final int CHECKSTATE_UNCHECKED = 0;
private static final int CHECKSTATE_GRAY = 1;
private static final int CHECKSTATE_CHECKED = 2;
static {
STATE_NAMES = new ArrayList();
STATE_NAMES.add(CHECKSTATE_UNCHECKED, "unchecked");
STATE_NAMES.add(CHECKSTATE_GRAY, "gray");
STATE_NAMES.add(CHECKSTATE_CHECKED, "checked");
}
private static String getName(int checkstate) {
return (String)STATE_NAMES.get(checkstate);
}
private static void assertState(TreeItem item, int expectedState) throws Exception {
Field checkStateField = TreeItem.class.getDeclaredField("checkState");
checkStateField.setAccessible(true);
int checkState = checkStateField.getInt(item);
assertEquals("For TreeItem " + item.getLabel() + ", expected " +
getName(expectedState) + " but was " + getName(checkState) + ";",
expectedState, checkState);
}
public void testSingleEntry() throws Exception {
TreeManager manager = new TreeManager();
TreeItem item = manager.new TreeItem("item");
item.setCheckState(true);
assertState(item, CHECKSTATE_CHECKED);
item.setCheckState(true);
assertState(item, CHECKSTATE_CHECKED);
item.setCheckState(false);
assertState(item, CHECKSTATE_UNCHECKED);
item.setCheckState(true);
assertState(item, CHECKSTATE_CHECKED);
item.setCheckState(false);
assertState(item, CHECKSTATE_UNCHECKED);
item.setCheckState(false);
assertState(item, CHECKSTATE_UNCHECKED);
}
public void testSingleChildAffectsParent() throws Exception {
TreeManager manager = new TreeManager();
TreeItem parent = manager.new TreeItem("parent");
TreeItem child = manager.new TreeItem("child");
parent.addChild(child);
child.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
child.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
child.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
}
public void testTwoChildrenAffectParent() throws Exception {
TreeManager manager = new TreeManager();
TreeItem parent = manager.new TreeItem("parent");
TreeItem son = manager.new TreeItem("son");
TreeItem daughter = manager.new TreeItem("daughter");
parent.addChild(son);
parent.addChild(daughter);
son.setCheckState(true);
daughter.setCheckState(false);
assertState(parent, CHECKSTATE_GRAY);
assertState(son, CHECKSTATE_CHECKED);
assertState(daughter, CHECKSTATE_UNCHECKED);
daughter.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(son, CHECKSTATE_CHECKED);
assertState(daughter, CHECKSTATE_CHECKED);
son.setCheckState(false);
assertState(parent, CHECKSTATE_GRAY);
assertState(son, CHECKSTATE_UNCHECKED);
assertState(daughter, CHECKSTATE_CHECKED);
daughter.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(son, CHECKSTATE_UNCHECKED);
assertState(daughter, CHECKSTATE_UNCHECKED);
}
public void testCheckUncheckChildAt3Deep() throws Exception {
TreeManager manager = new TreeManager();
TreeItem grandparent = manager.new TreeItem("grandparent");
TreeItem parent = manager.new TreeItem("parent");
TreeItem child = manager.new TreeItem("child");
grandparent.addChild(parent);
parent.addChild(child);
child.setCheckState(true);
assertState(grandparent, CHECKSTATE_CHECKED);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(true);
assertState(grandparent, CHECKSTATE_CHECKED);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(false);
assertState(grandparent, CHECKSTATE_UNCHECKED);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
child.setCheckState(true);
assertState(grandparent, CHECKSTATE_CHECKED);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
child.setCheckState(false);
assertState(grandparent, CHECKSTATE_UNCHECKED);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
child.setCheckState(false);
assertState(grandparent, CHECKSTATE_UNCHECKED);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
}
public void testCauseGrayAt3Deep() throws Exception {
TreeManager manager = new TreeManager();
TreeItem grandparent = manager.new TreeItem("grandparent");
TreeItem parent = manager.new TreeItem("parent");
TreeItem child1 = manager.new TreeItem("child1");
TreeItem child2 = manager.new TreeItem("child2");
grandparent.addChild(parent);
parent.addChild(child1);
parent.addChild(child2);
child1.setCheckState(true);
child2.setCheckState(false);
assertState(grandparent, CHECKSTATE_GRAY);
assertState(parent, CHECKSTATE_GRAY);
assertState(child1, CHECKSTATE_CHECKED);
assertState(child2, CHECKSTATE_UNCHECKED);
child2.setCheckState(true);
assertState(grandparent, CHECKSTATE_CHECKED);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child1, CHECKSTATE_CHECKED);
assertState(child2, CHECKSTATE_CHECKED);
child1.setCheckState(false);
assertState(grandparent, CHECKSTATE_GRAY);
assertState(parent, CHECKSTATE_GRAY);
assertState(child1, CHECKSTATE_UNCHECKED);
assertState(child2, CHECKSTATE_CHECKED);
child2.setCheckState(false);
assertState(grandparent, CHECKSTATE_UNCHECKED);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child1, CHECKSTATE_UNCHECKED);
assertState(child2, CHECKSTATE_UNCHECKED);
}
public void testCheckUncheckChildAt5Deep() throws Exception {
TreeManager manager = new TreeManager();
TreeItem items[] = new TreeItem[5];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("item" + i);
if(i > 0) {
items[i-1].addChild(items[i]);
}
}
items[4].setCheckState(true);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_CHECKED);
}
items[4].setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_UNCHECKED);
}
}
public void testCauseGrayAt5Deep() throws Exception {
TreeManager manager = new TreeManager();
TreeItem items[] = new TreeItem[4];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("item" + i);
if(i > 0) {
items[i-1].addChild(items[i]);
}
}
TreeItem child1 = manager.new TreeItem("child1");
TreeItem child2 = manager.new TreeItem("child2");
items[3].addChild(child1);
items[3].addChild(child2);
child1.setCheckState(true);
child2.setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_GRAY);
}
assertState(child1, CHECKSTATE_CHECKED);
assertState(child2, CHECKSTATE_UNCHECKED);
child2.setCheckState(true);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_CHECKED);
}
assertState(child1, CHECKSTATE_CHECKED);
assertState(child2, CHECKSTATE_CHECKED);
child1.setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_GRAY);
}
assertState(child1, CHECKSTATE_UNCHECKED);
assertState(child2, CHECKSTATE_CHECKED);
child2.setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_UNCHECKED);
}
assertState(child1, CHECKSTATE_UNCHECKED);
assertState(child2, CHECKSTATE_UNCHECKED);
}
public void testChildrenInMultipleBranchesAffectAncestors() throws Exception {
TreeManager manager = new TreeManager();
TreeItem root = manager.new TreeItem("root");
TreeItem itemA = manager.new TreeItem("itemA");
TreeItem itemA1 = manager.new TreeItem("itemA1");
TreeItem itemA2 = manager.new TreeItem("itemA2");
TreeItem itemB = manager.new TreeItem("itemB");
TreeItem itemB1 = manager.new TreeItem("itemB1");
TreeItem itemB2 = manager.new TreeItem("itemB2");
root.addChild(itemA);
root.addChild(itemB);
itemA.addChild(itemA1);
itemA.addChild(itemA2);
itemB.addChild(itemB1);
itemB.addChild(itemB2);
itemA1.setCheckState(true);
itemA2.setCheckState(false);
itemB1.setCheckState(false);
itemB2.setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_GRAY);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_UNCHECKED);
assertState(itemB1, CHECKSTATE_UNCHECKED);
assertState(itemB2, CHECKSTATE_UNCHECKED);
itemB2.setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_GRAY);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_GRAY);
assertState(itemB1, CHECKSTATE_UNCHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
itemA1.setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_GRAY);
assertState(itemB1, CHECKSTATE_UNCHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
itemB1.setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
assertState(itemB1, CHECKSTATE_CHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
itemA1.setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_GRAY);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
assertState(itemB1, CHECKSTATE_CHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
itemA2.setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(itemA, CHECKSTATE_CHECKED);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_CHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
assertState(itemB1, CHECKSTATE_CHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
itemB2.setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_CHECKED);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_CHECKED);
assertState(itemB, CHECKSTATE_GRAY);
assertState(itemB1, CHECKSTATE_CHECKED);
assertState(itemB2, CHECKSTATE_UNCHECKED);
itemA1.setCheckState(false);
itemA2.setCheckState(false);
itemB1.setCheckState(false);
assertState(root, CHECKSTATE_UNCHECKED);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_UNCHECKED);
assertState(itemB1, CHECKSTATE_UNCHECKED);
assertState(itemB2, CHECKSTATE_UNCHECKED);
}
public void testMultipleChildrenInOneBranchAffectParent() throws Exception {
TreeManager manager = new TreeManager();
TreeItem root = manager.new TreeItem("root");
TreeItem items[] = new TreeItem[5];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("child" + i);
root.addChild(items[i]);
items[i].setCheckState(false);
}
items[0].setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(items[0], CHECKSTATE_CHECKED);
assertState(items[1], CHECKSTATE_UNCHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_UNCHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
items[1].setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(items[0], CHECKSTATE_CHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_UNCHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
items[0].setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(items[0], CHECKSTATE_UNCHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_UNCHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
items[2].setCheckState(true);
items[3].setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(items[0], CHECKSTATE_UNCHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_CHECKED);
assertState(items[3], CHECKSTATE_CHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
items[0].setCheckState(true);
items[4].setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(items[0], CHECKSTATE_CHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_CHECKED);
assertState(items[3], CHECKSTATE_CHECKED);
assertState(items[4], CHECKSTATE_CHECKED);
items[2].setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(items[0], CHECKSTATE_CHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_CHECKED);
assertState(items[4], CHECKSTATE_CHECKED);
items[0].setCheckState(false);
items[1].setCheckState(false);
items[3].setCheckState(false);
items[4].setCheckState(false);
assertState(root, CHECKSTATE_UNCHECKED);
assertState(items[0], CHECKSTATE_UNCHECKED);
assertState(items[1], CHECKSTATE_UNCHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_UNCHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
}
public void testParentAffectsSingleChild() throws Exception {
TreeManager manager = new TreeManager();
TreeItem parent = manager.new TreeItem("parent");
TreeItem child = manager.new TreeItem("child");
parent.addChild(child);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(child, CHECKSTATE_CHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(child, CHECKSTATE_UNCHECKED);
}
public void testParentAffectsTwoChildren() throws Exception {
TreeManager manager = new TreeManager();
TreeItem parent = manager.new TreeItem("parent");
TreeItem son = manager.new TreeItem("son");
TreeItem daughter = manager.new TreeItem("daughter");
parent.addChild(son);
parent.addChild(daughter);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(son, CHECKSTATE_CHECKED);
assertState(daughter, CHECKSTATE_CHECKED);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(son, CHECKSTATE_CHECKED);
assertState(daughter, CHECKSTATE_CHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(son, CHECKSTATE_UNCHECKED);
assertState(daughter, CHECKSTATE_UNCHECKED);
parent.setCheckState(true);
assertState(parent, CHECKSTATE_CHECKED);
assertState(son, CHECKSTATE_CHECKED);
assertState(daughter, CHECKSTATE_CHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(son, CHECKSTATE_UNCHECKED);
assertState(daughter, CHECKSTATE_UNCHECKED);
parent.setCheckState(false);
assertState(parent, CHECKSTATE_UNCHECKED);
assertState(son, CHECKSTATE_UNCHECKED);
assertState(daughter, CHECKSTATE_UNCHECKED);
}
public void testParentAffectsMultipleChildrenInOneBranch() throws Exception {
TreeManager manager = new TreeManager();
TreeItem root = manager.new TreeItem("root");
TreeItem items[] = new TreeItem[5];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("child" + i);
root.addChild(items[i]);
items[i].setCheckState(false);
}
root.setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(items[0], CHECKSTATE_CHECKED);
assertState(items[1], CHECKSTATE_CHECKED);
assertState(items[2], CHECKSTATE_CHECKED);
assertState(items[3], CHECKSTATE_CHECKED);
assertState(items[4], CHECKSTATE_CHECKED);
root.setCheckState(false);
assertState(root, CHECKSTATE_UNCHECKED);
assertState(items[0], CHECKSTATE_UNCHECKED);
assertState(items[1], CHECKSTATE_UNCHECKED);
assertState(items[2], CHECKSTATE_UNCHECKED);
assertState(items[3], CHECKSTATE_UNCHECKED);
assertState(items[4], CHECKSTATE_UNCHECKED);
}
public void testParentAffectsDescendantsInMultipleBranches() throws Exception {
TreeManager manager = new TreeManager();
TreeItem root = manager.new TreeItem("root");
TreeItem itemA = manager.new TreeItem("itemA");
TreeItem itemA1 = manager.new TreeItem("itemA1");
TreeItem itemA2 = manager.new TreeItem("itemA2");
TreeItem itemB = manager.new TreeItem("itemB");
TreeItem itemB1 = manager.new TreeItem("itemB1");
TreeItem itemB2 = manager.new TreeItem("itemB2");
root.addChild(itemA);
root.addChild(itemB);
itemA.addChild(itemA1);
itemA.addChild(itemA2);
itemB.addChild(itemB1);
itemB.addChild(itemB2);
root.setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(itemA, CHECKSTATE_CHECKED);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_CHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
assertState(itemB1, CHECKSTATE_CHECKED);
assertState(itemB2, CHECKSTATE_CHECKED);
root.setCheckState(false);
assertState(root, CHECKSTATE_UNCHECKED);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_UNCHECKED);
assertState(itemB1, CHECKSTATE_UNCHECKED);
assertState(itemB2, CHECKSTATE_UNCHECKED);
}
public void testCheckUncheckParentWithDescendants5Deep() throws Exception {
TreeManager manager = new TreeManager();
TreeItem items[] = new TreeItem[5];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("item" + i);
if(i > 0) {
items[i-1].addChild(items[i]);
}
}
items[0].setCheckState(true);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_CHECKED);
}
items[0].setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_UNCHECKED);
}
}
public void testChangeOnGray() throws Exception {
TreeManager manager = new TreeManager();
TreeItem root = manager.new TreeItem("root");
TreeItem itemA = manager.new TreeItem("itemA");
TreeItem itemA1 = manager.new TreeItem("itemA1");
TreeItem itemA2 = manager.new TreeItem("itemA2");
TreeItem itemB = manager.new TreeItem("itemB");
root.addChild(itemA);
root.addChild(itemB);
itemA.addChild(itemA1);
itemA.addChild(itemA2);
root.setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(itemA, CHECKSTATE_CHECKED);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_CHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
itemA.setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
itemA1.setCheckState(true);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_GRAY);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
itemA.setCheckState(false);
assertState(root, CHECKSTATE_GRAY);
assertState(itemA, CHECKSTATE_UNCHECKED);
assertState(itemA1, CHECKSTATE_UNCHECKED);
assertState(itemA2, CHECKSTATE_UNCHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
itemA.setCheckState(true);
assertState(root, CHECKSTATE_CHECKED);
assertState(itemA, CHECKSTATE_CHECKED);
assertState(itemA1, CHECKSTATE_CHECKED);
assertState(itemA2, CHECKSTATE_CHECKED);
assertState(itemB, CHECKSTATE_CHECKED);
}
public void testCheckUncheckItemWithAncestorsAndDescendants() throws Exception {
TreeManager manager = new TreeManager();
TreeItem items[] = new TreeItem[5];
for(int i = 0; i < items.length; i++) {
items[i] = manager.new TreeItem("item" + i);
if(i > 0) {
items[i-1].addChild(items[i]);
}
}
items[3].setCheckState(true);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_CHECKED);
}
items[3].setCheckState(false);
for (TreeItem item : items) {
assertState(item, CHECKSTATE_UNCHECKED);
}
}
}